"""
1、类函数
需要使用装饰器@classmethod来标识其为类函数，对于类函数，第一个参数必须是类（当前类），
一般以cls作为第一个参数，但是，也可以命名其他的，一般习惯上都用cls。
"""

"""
2、静态函数
需要通过装饰器@staticmethod来进行修饰，静态方法既不需要传递类对象，也不需要传递实例对象（形参没有self/cls）
静态方法也能够通过 实例对象 和 类对象 去访问

特点：
·当方法中 既不需要使用实例对象（如实例对象 、实例属性），也不需要使用类对象（如类属性、类方法、创建实例等）时，定义静态函数
·取消不需要的参数传递，有利于 减少不必要的内存占用和性能消耗
"""


class Person():
    def __init__(self, name):  # 成员函数、对象函数、实例函数
        self.name = name

    def eat(self):  # 成员函数、对象函数、实例函数
        print(f'{self.name}正在吃饭')

    @classmethod
    def work(cls, other, num=100):  # 类函数
        print(cls.__name__)
        print(other)
        print('每个人都要工作')

    @staticmethod
    def run():
        print('每个人都可以跑起来')


p1 = Person('张三')
p1.eat()

# 类函数调用：两种方法
p1.work('abc')
Person.work('efg')

# 静态函数调用，两种方法
p1.run()
Person.run()
